/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fr.gauss.test;

import fr.vod.gauss.File.File;
import fr.vod.gauss.File.FileImpl;
import fr.vod.gauss.encoder.Encoder;
import fr.vod.gauss.encoder.EncoderImp;
import fr.vod.gauss.matrice.Matrice;
import fr.vod.gauss.matrice.MatriceImpl;
import fr.vod.gauss.matrice.PivotDeGauss;
import fr.vod.gauss.matrice.PivotDeGaussImpl;
import fr.vod.gauss.net.Format;
import fr.vod.gauss.net.FormatImpl;
import fr.vod.gauss.operations.CorpsDeGalloisOperation;
import fr.vod.gauss.operations.Operation;

import java.io.FileInputStream;
import java.util.Arrays;

/**
 *
 * @author drazanakoto
 */
public class Main {

    public static void main(String[] args) throws Exception {
       

    }

    /**
     *
     */
    public static void test() {
        int[] donnee = {101, 110, 73};
        Operation op = new CorpsDeGalloisOperation();
        Encoder en = new EncoderImp(op);

        /**
         *
         */
        int mat[][] = new int[][]{en.generateSymboles(3), en.generateSymboles(3), en.generateSymboles(3)};
        int un = en.calculCheckSum(donnee, mat[0]);
        int deux = en.calculCheckSum(donnee, mat[1]);
        int trois = en.calculCheckSum(donnee, mat[2]);
        int result[] = new int[]{un, deux, trois};

        /**
         *
         */
        Matrice matrice = new MatriceImpl(mat, result);

        System.out.println("donne a chercher\n" + Arrays.toString(donnee) + "\n");
        System.out.println("matrice de depart\n" + matrice + "\n");

        PivotDeGauss pdg = new PivotDeGaussImpl(op);
        pdg.resoudre(matrice);

        /**
         * solution *
         */
        System.out.println("matrice de solution\n" + matrice + "\n");

    }

    public static void other() {
        int[] data = {0, 24, 0};
        int[] symboles = {41, 121, 13};
        int check = 44;

        Operation op = new CorpsDeGalloisOperation();
        System.out.println(op.multiplication(data[0], symboles[0]) ^ op.multiplication(data[1], symboles[1]) ^ op.multiplication(data[2], symboles[2]));
    }
}
